//
//  WBStatusCell.swift
//  simpleWeibo
//
//  Created by sunmumu on 2018/10/5.
//  Copyright © 2018年 孙林. All rights reserved.
//

import UIKit


/// 微博cell 的协议
/// 如果需要设置可选协议方法
/// - 需要遵守 NSObjectProtocol协议
/// - 协议需要是 @objc 修饰的
/// - 方法需要 @objc optional 修饰的
@objc protocol WBStatusCellDelegate: NSObjectProtocol {
   @objc optional func statusCellDidSelectedURLString(cell: WBStatusCell, urlString: String)
}

class WBStatusCell: UITableViewCell {
    //代理属性 需要时weak修饰
    weak var delegate: WBStatusCellDelegate?
    var viewModel: WBStatusViewModel? {
        didSet {
            statusLabel.attributedText = viewModel?.statusAttrText
            forwardLabel?.attributedText = viewModel?.retweetedAttrText 
            nameLabel.text = viewModel?.status.user?.screen_name
            memberIconView.image = viewModel?.memberIcon
            vipIconView.image = viewModel?.vipIcon
            iconView.cz_setImage(urlString: viewModel?.status.user?.profile_image_url, placeholder: UIImage(named: "avatar_default_big"), isAvatar: true)
            toolBar.viewModel = viewModel
            //配图视图 的视图模型
            pictureView.viewModel = viewModel
            print("\(String(describing: viewModel?.status.source))")
            sourceLabel.text = viewModel?.status.source
        }
    }
    
    /// 头像
    @IBOutlet weak var iconView: UIImageView!
    /// 姓名
    @IBOutlet weak var nameLabel: UILabel!
    /// 会员图标
    @IBOutlet weak var memberIconView: UIImageView!
    /// 时间
    @IBOutlet weak var timeLabel: UILabel!
    /// 来源
    @IBOutlet weak var sourceLabel: UILabel!
    /// 认证图标
    @IBOutlet weak var vipIconView: UIImageView!
    /// 微博正文
    @IBOutlet weak var statusLabel: FFLabel!
    /// 底部视图
    @IBOutlet weak var toolBar: WBStatusToolBar!
    /// 配图视图
    @IBOutlet weak var pictureView: WBStatusPictureView!
    
    @IBOutlet weak var forwardLabel: FFLabel?
    
    override func awakeFromNib() {
        super.awakeFromNib()
        //离屏渲染 - 异步绘制
        self.layer.drawsAsynchronously = true
        //栅格化 - 异步绘制之后 会生产一张独立的图像 cell在屏幕上滚动的时候 本质上滚动给的是这张图片
        //cell优化 要尽量减少图层的数量 相当于只有一层!
        //停止滚动后 可以接收监听
        self.layer.shouldRasterize = true
        // 使用 '栅格化'  必须注意定制分辨率
        self.layer.rasterizationScale = UIScreen.main.scale
        
        statusLabel.delegate = self
        forwardLabel?.delegate = self
    }

}

// MARK: - FFLabelDelegate
extension WBStatusCell: FFLabelDelegate {
    func labelDidSelectedLinkText(label: FFLabel, text: String) {
        //判断是否含有 url
        if !text.hasPrefix("http://") {
            return
        }
        //插入 ? 表示代理没有实现协议方法 就什么都不做
        //插入 ! 代理没有实现协议方法 仍然强行执行, 会奔溃
        delegate?.statusCellDidSelectedURLString?(cell: self, urlString: text)
    }
}
